package com.bupt.vueblog.dao;

import com.bupt.vueblog.domain.dto.DetailInfoDTO;
import com.bupt.vueblog.domain.entity.Comment;
import com.bupt.vueblog.domain.entity.Relation;
import com.bupt.vueblog.domain.vo.BriefCommentVO;
import com.bupt.vueblog.domain.vo.CommentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 谭继好
 * @Description
 * @date 2024-04-09 12:34
 */
@Mapper
public interface CommentDAO {

    // 查出来博客下所有评论
    List<CommentVO> getByArticleId(@Param("userId")Integer userId,
                                   @Param("articleId") Integer articleId);

    // 查出来用户的所有评论Id
    List<Integer> getByUserId(Integer userId);

    Integer getArticleId(Integer commentId);

    void insert(Comment comment);

    // 改变评论的具体内容
    void changeInfo(DetailInfoDTO data);

    // 只改变点赞数
    void changeNum(Relation data);

    // 单独删除一条评论，这里不能恢复
    void delete(Integer id);

    // 删除用户后删除该用户下所有评论
    void deleteUser(Integer userId);

    // 删除一条评论之后将其下的评论变为一级评论，不再有依赖关系
    void changeParent(Integer parentId);

    // 删除用户后删除用户所有的评论，针对评论的所有评论变为一级评论
    void changeParents(@Param("ids") List<Integer> parentIds);

    // 查询出某用户所有博客下的评论
    List<BriefCommentVO> getByArticleIds(@Param("userId") Integer userId,
                                         @Param("ids") List<Integer> ids);


    List<BriefCommentVO> getByParentIds(@Param("ids") List<Integer> commentIds);

    // 查出来用户的所有评论
    List<BriefCommentVO> getByUser(int userId);
}
